/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import Utils.encriptaCadenas;
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;


public class Persona implements Serializable {
    private String codigoPersona;
    private String nombrePersona;
    private String paternoPersona;
    private String maternoPersona;
    private String telefonoPersona;
    private String paisPersona;
    private String ciudadPersona;
    private String direccionPersona;
    private String generoPersona;
    private Date nacimientoPersona;
    private Date fechaRegistro;
    private String estadoPersona;
    private String nivelPersona;
    private UsuarioPersona objUsuarioPersona=new UsuarioPersona();//actual
    private String usuarioNuevo;
    private String claveNuevo;
    private String opcion;
    private boolean retorno;
    
    public Persona() {
    }

    public String getCodigoPersona() {
        return codigoPersona;
    }

    public void setCodigoPersona(String codigoPersona) {
        this.codigoPersona = codigoPersona;
    }

    public String getNombrePersona() {
        return nombrePersona;
    }

    public void setNombrePersona(String nombrePersona) {
        this.nombrePersona = nombrePersona;
    }

    public String getPaternoPersona() {
        return paternoPersona;
    }

    public void setPaternoPersona(String paternoPersona) {
        this.paternoPersona = paternoPersona;
    }

    public String getMaternoPersona() {
        return maternoPersona;
    }

    public void setMaternoPersona(String maternoPersona) {
        this.maternoPersona = maternoPersona;
    }

    public String getTelefonoPersona() {
        return telefonoPersona;
    }

    public void setTelefonoPersona(String telefonoPersona) {
        this.telefonoPersona = telefonoPersona;
    }

    public String getPaisPersona() {
        return paisPersona;
    }

    public void setPaisPersona(String paisPersona) {
        this.paisPersona = paisPersona;
    }

    public String getCiudadPersona() {
        return ciudadPersona;
    }

    public void setCiudadPersona(String ciudadPersona) {
        this.ciudadPersona = ciudadPersona;
    }

    public String getDireccionPersona() {
        return direccionPersona;
    }

    public void setDireccionPersona(String direccionPersona) {
        this.direccionPersona = direccionPersona;
    }

    public String getGeneroPersona() {
        return generoPersona;
    }

    public void setGeneroPersona(String generoPersona) {
        this.generoPersona = generoPersona;
    }

    public Date getNacimientoPersona() {
        return nacimientoPersona;
    }

    public void setNacimientoPersona(Date nacimientoPersona) {
        this.nacimientoPersona = nacimientoPersona;
    }

    public Date getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Date fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public String getEstadoPersona() {
        return estadoPersona;
    }

    public void setEstadoPersona(String estadoPersona) {
        this.estadoPersona = estadoPersona;
    }

    public String getNivelPersona() {
        return nivelPersona;
    }

    public void setNivelPersona(String nivelPersona) {
        this.nivelPersona = nivelPersona;
    }

    public UsuarioPersona getObjUsuarioPersona() {
        return objUsuarioPersona;
    }

    public void setObjUsuarioPersona(UsuarioPersona objUsuarioPersona) {
        this.objUsuarioPersona = objUsuarioPersona;
    }

    public String getOpcion() {
        return opcion;
    }

    public void setOpcion(String opcion) {
        this.opcion = opcion;
    }

    public boolean isRetorno() {
        return retorno;
    }

    public void setRetorno(boolean retorno) {
        this.retorno = retorno;
    }

    public String getUsuarioNuevo() {
        return usuarioNuevo;
    }

    public void setUsuarioNuevo(String usuarioNuevo) {
        this.usuarioNuevo = usuarioNuevo;
    }

    public String getClaveNuevo() {
        return claveNuevo;
    }

    public void setClaveNuevo(String claveNuevo) {
        this.claveNuevo = claveNuevo;
    }

  //registrar
     public static boolean registrarCliente (Persona a)
    {
        boolean estado = false ;
        Connection conexion=null;
        String clave_se,clave_enc;
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall(" {call sp_registrarCliente "
                     +"(?,?,?,?,?,?,?,?,?,?,?,?,?)} ");
             st.setString(1,a.getCodigoPersona());
             st.setString(2,a.getNombrePersona());
             st.setString(3,a.getPaternoPersona());
             st.setString(4,a.getMaternoPersona());
             st.setString(5,a.getTelefonoPersona());
             st.setString(6,a.getPaisPersona());
             st.setString(7,a.getCiudadPersona());
             st.setString(8,a.getDireccionPersona());
             st.setString(9,a.getGeneroPersona());
             st.setDate(10,new java.sql.Date(a.getNacimientoPersona().getTime()));
             st.setString(11,a.getObjUsuarioPersona().getCodigoUsuario());
             //encriptar la clave antes de ser enviada
             clave_se=a.getObjUsuarioPersona().getClaveUsuario();
             clave_enc=encriptaCadenas.getStringMessageDigest(clave_se,encriptaCadenas.MD5);
             st.setString(12,clave_enc);
             st.registerOutParameter(13,java.sql.Types.BOOLEAN);
             st.execute();
             a.setRetorno(st.getBoolean(13));
             if(a.isRetorno()==true)
             {
                 estado=true;
             }
        st.close();
        conexion.close();
             
         } catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
         }
         
        return estado;  
        
    }
     
   //registrar
     public static boolean registrarPersonal (Persona a)
    {
        boolean estado = false ;
        Connection conexion=null;
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall(" {call sp_registrarPersonal "
                     +"(?,?,?,?,?,?,?,?,?,?,?,?)} ");
             st.setString(1,a.getCodigoPersona());
             st.setString(2,a.getNombrePersona());
             st.setString(3,a.getPaternoPersona());
             st.setString(4,a.getMaternoPersona());
             st.setString(5,a.getTelefonoPersona());
             st.setString(6,a.getPaisPersona());
             st.setString(7,a.getCiudadPersona());
             st.setString(8,a.getDireccionPersona());
             st.setString(9,a.getGeneroPersona());
             st.setDate(10,new java.sql.Date(a.getNacimientoPersona().getTime()));
             st.setString(11,a.getNivelPersona());
             st.registerOutParameter(12,java.sql.Types.BOOLEAN);
             st.execute();
             a.setRetorno(st.getBoolean(12));
             if(a.isRetorno()==true)
             {
                 estado=true;
             }
        st.close();
        conexion.close();
             
         } catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
         }
         
        return estado;  
        
    } 
     
    //listar persona por codigo
     public static ArrayList<Persona>
            getListarPersona(Persona a){
        ArrayList<Persona> arreglo=null;
        Persona obj=null;
        Connection conexion=null;
        ResultSet rs=null;
        
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall("{call sp_listarPersona(?)}");
             st.setString(1,a.getCodigoPersona());
            rs=st.executeQuery();
            if(rs.next()){
                arreglo=new ArrayList<Persona>();
                do{
                obj= new Persona();
                obj.setCodigoPersona(rs.getString("codigoPersona"));
                obj.setNombrePersona(rs.getString("nombrePersona"));
                obj.setPaternoPersona(rs.getString("paternoPersona"));
                obj.setMaternoPersona(rs.getString("maternoPersona"));
                obj.setTelefonoPersona(rs.getString("telefonoPersona"));
                obj.setPaisPersona(rs.getString("paisPersona"));
                obj.setCiudadPersona(rs.getString("ciudadPersona"));
                obj.setDireccionPersona(rs.getString("direccionPersona"));
                obj.setGeneroPersona(rs.getString("generoPersona"));
                obj.setNacimientoPersona(rs.getDate("nacimientoPersona"));
                obj.setFechaRegistro(rs.getDate("fechaRegistro"));
                obj.getObjUsuarioPersona().setCodigoUsuario(rs.getString("codigoUsuario"));
                obj.setNivelPersona(rs.getString("nivelPersona"));
                obj.setNivelPersona(rs.getString("estadoPersona"));
                       
                arreglo.add(obj);
                
                }while (rs.next());
            }
        rs.close();
        st.close();
        conexion.close();
             
         }
         catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
    
}
    return arreglo;
     }
     //listar todos los registrados
     public static ArrayList<Persona>
            getListarPersonaTodos(){
        ArrayList<Persona> arreglo=null;
        Persona obj=null;
        Connection conexion=null;
        ResultSet rs=null;
        
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall("{call sp_listarPersonaTodos()}");
            rs=st.executeQuery();
            if(rs.next()){
                arreglo=new ArrayList<Persona>();
                do{
                obj= new Persona();
                obj.setCodigoPersona(rs.getString("codigoPersona"));
                obj.setNombrePersona(rs.getString("nombrePersona"));
                obj.setPaternoPersona(rs.getString("paternoPersona"));
                obj.setMaternoPersona(rs.getString("maternoPersona"));
                obj.setTelefonoPersona(rs.getString("telefonoPersona"));
                obj.setPaisPersona(rs.getString("paisPersona"));
                obj.setCiudadPersona(rs.getString("ciudadPersona"));
                obj.setDireccionPersona(rs.getString("direccionPersona"));
                obj.setGeneroPersona(rs.getString("generoPersona"));
                obj.setNacimientoPersona(rs.getDate("nacimientoPersona"));
                obj.setFechaRegistro(rs.getDate("fechaRegistro"));
                obj.getObjUsuarioPersona().setCodigoUsuario(rs.getString("codigoUsuario"));
                obj.setNivelPersona(rs.getString("nivelPersona"));
                obj.setEstadoPersona(rs.getString("estadoPersona"));
                       
                arreglo.add(obj);
                
                }while (rs.next());
            }
        rs.close();
        st.close();
        conexion.close();
             
         }
         catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
    
}
    return arreglo;
     }
     
     /**
      * buscar persona por parametros
      */
     public static ArrayList<Persona> getBuscarPersonaParametro(Persona persona){
     ArrayList<Persona> arreglo=null;
     ResultSet rs=null;
        Persona obj=null;
        Connection conexion = null;
        try{
           conexion = ControladorBD.darConexionBD();
           conexion.setAutoCommit(false);
           conexion = ControladorBD.darConexionBD();
            CallableStatement st = conexion.prepareCall( "{call sp_buscarPersonaParametro(?,?,?,?)}");
            st.setString(1, persona.getCodigoPersona());
            st.setString(2, persona.getNivelPersona());
            st.setString(3, persona.getPaternoPersona());
            st.setString(4, persona.getMaternoPersona());
            rs = st.executeQuery();
            if (rs.next()){
               arreglo=new ArrayList<Persona>();   
                do{
                        obj =new Persona();
                        obj.setCodigoPersona(rs.getString("codigoPersona"));    
                        obj.setPaternoPersona(rs.getString("paternoPersona"));
                        obj.setMaternoPersona(rs.getString("maternoPersona"));
                        obj.setNombrePersona(rs.getString("nombrePersona"));
                        obj.setGeneroPersona(rs.getString("generoPersona"));
                        obj.setPaisPersona(rs.getString("paisPersona"));
                        obj.setTelefonoPersona(rs.getString("telefonoPersona"));
                        obj.setCiudadPersona(rs.getString("ciudadPersona"));
                        obj.setDireccionPersona(rs.getString("direccionPersona"));
                        obj.setNacimientoPersona(rs.getDate("nacimientoPersona"));
                        obj.getObjUsuarioPersona().setCodigoUsuario(rs.getString("codigoUsuario"));
                        obj.setNivelPersona(rs.getString("nivelPersona"));                        
                        arreglo.add(obj);
                }while (rs.next());
            }
            st.close();
            conexion.setAutoCommit(true);
            conexion.close();
        }catch(Exception error){
            System.out.println("Error en el metodo por: " + error.getMessage());
            error.printStackTrace();
        }
        return arreglo;

    }
     
     
     
     //actualizar
     public static boolean actualizarPersona (Persona a)
    {
        boolean estado = false ;
        Connection conexion=null;
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall(" {call sp_actualizarPersona "
                     +"(?,?,?,?,?,?,?,?,?)} ");
             st.setString(1,a.getNombrePersona());
             st.setString(2,a.getPaternoPersona());
             st.setString(3,a.getMaternoPersona());
             st.setString(4,a.getTelefonoPersona());
             st.setString(5,a.getObjUsuarioPersona().getCodigoUsuario());
             st.setString(6,a.getUsuarioNuevo());
             st.setString(7,a.getObjUsuarioPersona().getClaveUsuario());
             st.setString(8,a.getClaveNuevo());
             st.registerOutParameter(9,java.sql.Types.BOOLEAN);
             st.execute();
             a.setRetorno(st.getBoolean(9));
             if(a.isRetorno()==true)
             {
                 estado=true;
             }
        st.close();
        conexion.close();
             
         } catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
         }
         
        return estado;  
        
    } 
}
